home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-04-26 | 3.3 KB | 123 lines | [TEXT/Help] |
- ;••• GENERATION DE CODE - Machine •••
-
- (define (registre? r)(memq? r '(sp lp r0 r1 r2 a0 a1 d0 d1)))
-
- (define (nec-mode-s m)
- (cond (atom? m) (cond (eq? m 'r2) (list 'R2 'ce) (list m))
- (null? (-1 m)) m
- (eq? (0 m) '-) (list (1 m))
- (eq? (0 m) '#) ()
- (eq? (1 m) '+) (list (0 m))
- (data? m) ()
- (number? (0 m)) (cond (eq? (1 m) 'PC) ()
- (list (1 m)))))
-
- (define (nec-mode-d m)
- (cond (atom? m) ()
- (data? m) ()
- (null? (-1 m)) m
- (eq? (0 m) '-) (list (1 m))
- (eq? (1 m) '+) (list (0 m))
- (number? (0 m)) (cond (eq? (1 m) 'PC) () (list (1 m)))))
-
- (define (mod-mode-d m)
- (cond (not m) ()
- (atom? m) (list m)
- (data? m) ()
- (null? (-1 m)) (list 'm)
- (eq? (0 m) '-) (cond (neq? (1 m) 'SP) (list 'm) ())
- (eq? (1 m) '+) (cond (neq? (0 m) 'LP) (list 'm) ())
- (number? (0 m)) (list 'm)))
-
- ;un RTS necessite R0 (retour de valeur)
-
- (define (synt-rts )
- (mpthunk '((rts))
- (minfo '(r0) '() ())))
-
- (define (synt-call t)
- (mpthunk `((jsr (,(source t) A5)))
- (minfo (union-set '() (nec t)) (mod t) (str t))))
-
- (define (synt-callo t)
- (mpthunk `((jmp (,(source t) A5)))
- (minfo (union-set '(r0) (nec t)) (mod t) (str t))))
-
- (define (synt-jsr m)
- (mpthunk `((jsr ,m))
- (minfo (nec-mode-s m)
- '(r0 r1 r2 a0 a1 d0 d1) ())))
-
- (define (synt-jmp m)
- (mpthunk `((jmp ,m))
- (minfo (nec-mode-s m)
- '(r0 r1 r2 a0 a1 d0 d1) ())))
-
- (define (synt-beq l)
- (mpthunk `((beq ,(-1 l) ,(where l)))
- (minfo () () ())))
-
- (define (synt-bpl l)
- (mpthunk `((bpl ,(-1 l) ,(where l)))
- (minfo () () ())))
-
- (define (synt-bra l)
- (mpthunk `((bra ,(-1 l) ,(where l)))
- (minfo () () ())))
-
- (define (synt-label l)
- (mpthunk `((label ,(-1 l) ,(where l)))
- (minfo ()()())))
-
- (define (synt-cmp s m1 m2)
- (mpthunk `((cmp ,s ,m1 ,m2))
- (minfo (append (nec-mode-s m1)
- (nec-mode-d m2))
- ()())))
-
- (define (synt-btst n m)
- (mpthunk `((btst (# ,n) ,m))
- (minfo (nec-mode-s m)()())))
-
- (define (synt-bset n m)
- (mpthunk `((bset (# ,n) ,m))
- (minfo (nec-mode-d m)
- (mod-mode-d m)())))
-
- (define (synt-bclr n m)
- (mpthunk `((bclr (# ,n) ,m))
- (minfo (nec-mode-d m)
- (mod-mode-d m)())))
-
- (define (synt-or s m1 m2)
- (mpthunk `((or ,s ,m1 ,m2))
- (minfo (append (nec-mode-s m1)
- (nec-mode-d m2))
- (mod-mode-d m2)())))
-
- (define (synt-sub s m1 m2)
- (mpthunk `((sub ,s ,m1 ,m2))
- (minfo (append (nec-mode-s m1)
- (nec-mode-d m2))
- (mod-mode-d m2)())))
-
- (define (synt-tst s m)
- (mpthunk `((tst ,s ,m))
- (minfo (nec-mode-s m)
- ()())))
-
- (define (synt-lea m1 m2)
- (mpthunk `((lea ,m1 ,m2))
- (minfo (nec-mode-s m1)
- (nec-mode-d m2)())))
-
- (define (synt-move s m1 m2)
- (cond (and (<>? m1 m2)
- (neq? m2 ƒ))
- (mpthunk `((move ,s ,m1 ,m2))
- (minfo (union-set (nec-mode-s m1)
- (nec-mode-d m2))
- (mod-mode-d m2)()))
- (empty-pthunk)))
-
-